Prototyping: An Approach to Evolutionary System Development
Authors: Reinhard Budde, Karlheinz Kautz, Karin Kuhlenkamp, Heinz Züllighoven, Reinhard Budde, Karlheinz Kautz, Karin Kuhlenkamp, Heinz Züllighoven
Overview
This book explores prototyping as an approach to evolutionary system development. It aims to provide a comprehensive understanding of prototyping’s impact on the software development process, emphasizing its role in creating more user-centered and adaptable software. The target audience includes software engineers, project managers, and anyone involved in the software development lifecycle. The book addresses the challenges of traditional software development methodologies, particularly their limitations in handling evolving requirements and user feedback. Prototyping is presented as a solution, enabling early and frequent user involvement through the creation of working system versions. Several different prototyping strategies are discussed, including exploratory, experimental, and evolutionary prototyping, each catering to different development goals. The importance of appropriate tool support is highlighted, with analysis of screen generators, database-oriented development systems, very high-level languages (VHLLs), and programming environments. The book emphasizes the connection between prototyping and evolutionary system development, arguing that software development is not a linear, isolated activity, but rather an iterative, collaborative process embedded within dynamic organizational contexts. Technical aspects of implementing software versions are explored, discussing object-oriented design, the client-supplier model, and the separation of interaction and functionality. Practical examples and case studies from real-world projects are used throughout the book to illustrate the diverse applications of prototyping and its impact on different stakeholders, including developers, users, and management. The book concludes with a discussion of the organizational changes needed to support prototyping and evolutionary system development, including new forms of project organization, infrastructure, and contracts. Overall, the book advocates for a shift from traditional software development towards a more user-centered, adaptable, and evolutionary approach, highlighting prototyping as a key enabling technique.
Book Outline
1. What is Prototyping?
We introduce prototyping as an approach to software development that prioritizes building working versions early and often to facilitate experimentation and user feedback. This is in contrast to traditional approaches which emphasize complete upfront specifications.
Key concept: Prototyping is an approach based on an evolutionary view of software development and having an impact on the development process as a whole. Prototyping involves producing early working versions (prototypes) of the future application system and experimenting with them.
2. Basic Elements of System Development
We present a model for software development using informal nets to represent activities and documents. We explain the importance of feedback cycles, particularly validation, which focuses on user needs, and verification, which focuses on internal consistency and completeness.
Key concept: Construction and evaluation are the two fundamental activities in software development, with evaluation providing feedback on construction activities to ensure alignment with the project goals.
3. Traditional Life Cycle Plans
We discuss traditional life cycle plans and highlight their problems. We explain the ‘Waterfall Model’ and explore its rigid, sequential nature, which can lead to difficulties in handling evolving requirements and user needs.
Key concept: Traditional life cycle plans, such as the Waterfall model, suffer from a lack of early feedback, making it difficult to adapt to changing requirements or correct errors made in early phases.
4. Prototyping
We explain different aspects of prototyping: its role in the software development process, the various goals of prototyping (exploratory, experimental, evolutionary), the distinction between horizontal and vertical prototyping, and the relationship between the prototype and the final application system.
Key concept: Prototypes can be categorized as prototypes proper, breadboards, and pilot systems. These types are employed at different stages of development and serve different purposes.
5. Evolutionary System Development
We argue that viewing software development as an evolutionary process is essential. We explain how evolutionary system development relies on iterative feedback and prototyping to adapt to user needs and changing organizational contexts.
Key concept: Evolutionary system development views software projects as embedded within larger organizational changes driven by information technology. Prototyping plays a key role in managing this evolution.
6. Evolutionary Process Models
We illustrate how various technical concepts can aid in the implementation of software versions for evolutionary system development. We discuss the benefits of object-oriented design, the client-supplier model, the separation of interaction and functionality, and the model-view-controller paradigm.
Key concept: The model-view-controller paradigm is an effective architectural model for building interactive software because it supports the separation of interaction and functionality, allowing independent evolution and flexibility.
7. The Tool Landscape
We discuss the available tool landscape for prototyping. We categorize and characterize these tools, emphasizing the need for appropriate support when choosing tools for specific prototyping tasks.
Key concept: Tools and toolkits are essential for efficient prototype construction. They can be classified as screen generators, database-oriented development systems, very high-level languages (VHLLs), and programming environments.
8. Screen Generators
We present an analysis of screen generators and how they can be used to support prototype construction. We detail their capabilities and limitations, specifically their usefulness for implementing user interfaces.
Key concept: Screen generators offer efficient means for defining screen layouts and simple dialogs, supporting horizontal prototyping, but are often limited in their flexibility and dynamics for complex prototyping needs.
9. Database-Oriented Development Systems
We present an analysis of database-oriented development systems, specifically relational systems. We demonstrate how these systems support prototype construction by providing tools for data management, user interface design, and flow of control.
Key concept: Database-oriented development systems, particularly relational systems, provide an integrated environment for defining data models, forms, menus, and application programs, which is highly beneficial for building database application prototypes.
10. Very High Level Languages
We introduce very high-level languages (VHLLs) and their key characteristics. We explain their benefits for rapid prototyping, exploring their application areas and the criteria for selecting a suitable VHLL.
Key concept: VHLLs like Lisp, Prolog, and Smalltalk offer expressive power and flexibility for implementing prototypes but can be less efficient than traditional languages and may lack robust support for interactive components.
11. Programming Environments
We discuss the features and importance of programming environments for prototyping. We present our view of an ‘ideal’ programming environment, drawing on the example of ProLab, a Prolog programming environment.
Key concept: A programming environment integrates tools and languages to support the entire software development lifecycle, which is of particular importance for evolutionary system development and prototyping.
12. Prototyping in Practice
We analyze how prototyping is employed in practice, comparing its use in traditional approaches like the waterfall model with its role in evolutionary strategies. We discuss user development and its potential benefits and limitations, as well as the importance of documentation.
Key concept: Integrating prototyping with traditional approaches can be beneficial when user requirements or system functionality are well-understood, but evolutionary strategies are necessary when substantial adaptations to the work environment are required.
13. The Groups Involved in Prototyping
We conclude by examining the impact of prototyping on different groups: the developers, the users, and management. We analyze the changes in work style, project organization, infrastructure, and contracts that are brought about by the adoption of prototyping.
Key concept: Prototyping affects various groups involved in software development, including developers, users, and management. Each group experiences changes in their work practices and requires specific support to successfully adopt prototyping.
Essential Questions
1. How does prototyping differ from traditional software development, and what key problems does it solve?
Prototyping addresses the limitations of traditional software development by enabling early and frequent feedback through working versions of the system. Traditional methods, like the Waterfall model, suffer from a lack of early user input and adaptation, leading to issues discovered late in development. Prototyping tackles these challenges by facilitating a continuous feedback loop between developers and users, promoting adaptability to changing user needs. It encourages an experimental, experience-based approach to software construction, replacing the traditional linear process with an iterative, evolutionary one. Prototyping also addresses the disconnect between formal specifications and user requirements by providing tangible, working models that can be evaluated directly by users, even if they are non-technical.
2. What are the different kinds of prototypes and strategies, and how do they address various development needs?
Prototyping isn’t a monolithic approach; rather, there exist several methods for constructing prototypes. Prototypes proper simulate specific aspects of the system, like the user interface or some essential functionality, facilitating a deeper problem analysis. Breadboards focus on technical feasibility and the internal design of the system, hidden from users. Pilot systems are prototypes deployed in real-world settings, providing invaluable early feedback under realistic conditions. Furthermore, prototyping can be driven by different goals. Exploratory prototyping aims to clarify system requirements, experimental prototyping assesses technical implementation options, while evolutionary prototyping embraces continuous adaptation to changing needs. By understanding these distinctions, developers can choose an appropriate prototyping strategy for any given development situation.
3. What is evolutionary system development, and how does prototyping play a crucial role in it?
Evolutionary system development is not merely about constructing isolated systems, but rather about understanding how software systems evolve within dynamic organizations. Information technology is not simply a tool, but a driver of organizational change. Prototyping is instrumental in managing this evolution, supporting continuous adaptation to changes in work processes, organizational structure, and business needs. Unlike traditional methods that treat software development as a linear, self-contained project, evolutionary system development views it as a continuous process intertwined with organizational evolution, allowing for flexible adaptation and improvement throughout the system’s life cycle.
4. What tools are available for prototype construction, and what are their respective strengths and weaknesses?
Modern software tools are crucial for effective prototype construction. Screen generators are helpful for designing user interfaces, but offer limited dynamic functionality. Database-oriented systems are valuable for database applications, offering integrated environments for data management, forms, and menus. VHLLs are known for their flexibility and suitability for experiments, especially in Artificial Intelligence applications, but can be less efficient than traditional languages. Programming environments integrate these tools, offering a unified platform that supports prototyping by enabling swift development cycles, version management, and other essential activities.
5. How does prototyping affect the roles and responsibilities of developers, users, and management, and what new challenges does it pose?
The human factor plays a crucial role in successful prototyping. Developers need to adapt to new working styles, involving close collaboration with users and a continuous feedback loop. Users, in turn, are required to be more actively involved in the development process and may need training to effectively contribute. Management needs to understand prototyping’s implications for project management and provide appropriate support, including adapted contracts and funding models. Documentation remains a challenge in prototyping, and new approaches like hypermedia systems offer potential solutions to effectively capture and manage evolving design decisions.
1. How does prototyping differ from traditional software development, and what key problems does it solve?
Prototyping addresses the limitations of traditional software development by enabling early and frequent feedback through working versions of the system. Traditional methods, like the Waterfall model, suffer from a lack of early user input and adaptation, leading to issues discovered late in development. Prototyping tackles these challenges by facilitating a continuous feedback loop between developers and users, promoting adaptability to changing user needs. It encourages an experimental, experience-based approach to software construction, replacing the traditional linear process with an iterative, evolutionary one. Prototyping also addresses the disconnect between formal specifications and user requirements by providing tangible, working models that can be evaluated directly by users, even if they are non-technical.
2. What are the different kinds of prototypes and strategies, and how do they address various development needs?
Prototyping isn’t a monolithic approach; rather, there exist several methods for constructing prototypes. Prototypes proper simulate specific aspects of the system, like the user interface or some essential functionality, facilitating a deeper problem analysis. Breadboards focus on technical feasibility and the internal design of the system, hidden from users. Pilot systems are prototypes deployed in real-world settings, providing invaluable early feedback under realistic conditions. Furthermore, prototyping can be driven by different goals. Exploratory prototyping aims to clarify system requirements, experimental prototyping assesses technical implementation options, while evolutionary prototyping embraces continuous adaptation to changing needs. By understanding these distinctions, developers can choose an appropriate prototyping strategy for any given development situation.
3. What is evolutionary system development, and how does prototyping play a crucial role in it?
Evolutionary system development is not merely about constructing isolated systems, but rather about understanding how software systems evolve within dynamic organizations. Information technology is not simply a tool, but a driver of organizational change. Prototyping is instrumental in managing this evolution, supporting continuous adaptation to changes in work processes, organizational structure, and business needs. Unlike traditional methods that treat software development as a linear, self-contained project, evolutionary system development views it as a continuous process intertwined with organizational evolution, allowing for flexible adaptation and improvement throughout the system’s life cycle.
4. What tools are available for prototype construction, and what are their respective strengths and weaknesses?
Modern software tools are crucial for effective prototype construction. Screen generators are helpful for designing user interfaces, but offer limited dynamic functionality. Database-oriented systems are valuable for database applications, offering integrated environments for data management, forms, and menus. VHLLs are known for their flexibility and suitability for experiments, especially in Artificial Intelligence applications, but can be less efficient than traditional languages. Programming environments integrate these tools, offering a unified platform that supports prototyping by enabling swift development cycles, version management, and other essential activities.
5. How does prototyping affect the roles and responsibilities of developers, users, and management, and what new challenges does it pose?
The human factor plays a crucial role in successful prototyping. Developers need to adapt to new working styles, involving close collaboration with users and a continuous feedback loop. Users, in turn, are required to be more actively involved in the development process and may need training to effectively contribute. Management needs to understand prototyping’s implications for project management and provide appropriate support, including adapted contracts and funding models. Documentation remains a challenge in prototyping, and new approaches like hypermedia systems offer potential solutions to effectively capture and manage evolving design decisions.
Key Takeaways
1. Early and Frequent Feedback
By using prototypes early and frequently, developers and users can ensure the software addresses actual needs and is usable. Early feedback helps identify potential issues and inform design decisions before committing significant resources.
Practical Application:
In an AI project, start with a simple prototype of the core algorithm, focusing on demonstrating its capabilities. Then, iteratively refine the prototype based on feedback, adding features and improving the user interface as understanding evolves.
2. Modularity and Flexibility
This modular approach promotes flexibility by allowing each module to be developed and tested independently, even with different tools or by different teams. This helps adapt the overall system as needed and reuse modules in other projects.
Practical Application:
Design an AI system with a modular architecture, separating the core AI engine from the user interface and other components. This enables independent development and testing of each part, promoting flexibility and maintainability.
3. Iterative and Evolutionary Development
This iterative approach not only allows software to adapt to specific needs, it also promotes co-evolution of both technology and the user organization, enabling a smoother integration and adaptation to new work styles.
Practical Application:
When introducing new AI tools in an organization, avoid a large-scale deployment from the start. Instead, choose a specific group or department for a pilot implementation to gain experience, allowing both the technology and the organization to adapt.
4. Collaboration and Communication
Traditionally, communication and feedback in software projects are seen as extra overhead. This must change in prototyping projects: close cooperation and continuous communication between developers and users are instrumental for making informed design decisions and adapting the system promptly to evolving needs.
Practical Application:
In an AI development team, introduce pair programming and code reviews to facilitate communication and knowledge sharing among the developers, fostering a shared understanding of the system and its components.
5. Dynamic Documentation
Traditional approaches to software documentation, often neglected or postponed, are unsuitable for capturing dynamic development processes. Tools like hypermedia or wikis offer an alternative for collaborative documentation, allowing developers to record decisions, manage changes, and track system evolution.
Practical Application:
Use a tool like Notion or Coda to document the AI system’s development history, design rationale, user feedback, and other relevant information in a collaborative and accessible way.
1. Early and Frequent Feedback
By using prototypes early and frequently, developers and users can ensure the software addresses actual needs and is usable. Early feedback helps identify potential issues and inform design decisions before committing significant resources.
Practical Application:
In an AI project, start with a simple prototype of the core algorithm, focusing on demonstrating its capabilities. Then, iteratively refine the prototype based on feedback, adding features and improving the user interface as understanding evolves.
2. Modularity and Flexibility
This modular approach promotes flexibility by allowing each module to be developed and tested independently, even with different tools or by different teams. This helps adapt the overall system as needed and reuse modules in other projects.
Practical Application:
Design an AI system with a modular architecture, separating the core AI engine from the user interface and other components. This enables independent development and testing of each part, promoting flexibility and maintainability.
3. Iterative and Evolutionary Development
This iterative approach not only allows software to adapt to specific needs, it also promotes co-evolution of both technology and the user organization, enabling a smoother integration and adaptation to new work styles.
Practical Application:
When introducing new AI tools in an organization, avoid a large-scale deployment from the start. Instead, choose a specific group or department for a pilot implementation to gain experience, allowing both the technology and the organization to adapt.
4. Collaboration and Communication
Traditionally, communication and feedback in software projects are seen as extra overhead. This must change in prototyping projects: close cooperation and continuous communication between developers and users are instrumental for making informed design decisions and adapting the system promptly to evolving needs.
Practical Application:
In an AI development team, introduce pair programming and code reviews to facilitate communication and knowledge sharing among the developers, fostering a shared understanding of the system and its components.
5. Dynamic Documentation
Traditional approaches to software documentation, often neglected or postponed, are unsuitable for capturing dynamic development processes. Tools like hypermedia or wikis offer an alternative for collaborative documentation, allowing developers to record decisions, manage changes, and track system evolution.
Practical Application:
Use a tool like Notion or Coda to document the AI system’s development history, design rationale, user feedback, and other relevant information in a collaborative and accessible way.
Memorable Quotes
1.1. 6
Prototyping involves producing early working versions (prototypes) of the future application system and experimenting with them.
3.4. 28
A complete and permanently correct description of information systems is not possible.
5.1. 49
Evolutionary system development is a view of software development… [that] stands for a specific way of looking at software development in order to gain a better understanding of it.
6.1.1. 72
Object-oriented design opens up the path to a more user-oriented understanding of software by focusing on ways of handling objects.
12.5. 170
Documentation remains the Cinderella of software development. And prototyping has done nothing to alter this fact.
1.1. 6
Prototyping involves producing early working versions (prototypes) of the future application system and experimenting with them.
3.4. 28
A complete and permanently correct description of information systems is not possible.
5.1. 49
Evolutionary system development is a view of software development… [that] stands for a specific way of looking at software development in order to gain a better understanding of it.
6.1.1. 72
Object-oriented design opens up the path to a more user-oriented understanding of software by focusing on ways of handling objects.
12.5. 170
Documentation remains the Cinderella of software development. And prototyping has done nothing to alter this fact.
Comparative Analysis
Prototyping: An Approach to Evolutionary System Development
Reflection
This book, published in 1992, offers a historical perspective on the adoption of prototyping and evolutionary software development, valuable for understanding the shift away from rigid Waterfall methods. While some of the specific technologies discussed are dated, the underlying principles and challenges remain highly relevant today, especially in the context of agile development and the rise of user-centric design. The book’s emphasis on the interplay between software systems and organizational change is prescient, anticipating the dynamic nature of software’s role in shaping businesses and work practices. Some weaknesses include the somewhat limited scope of tool discussion, focusing primarily on the then-available technologies, and the relatively little attention to the emergent object-oriented programming paradigm. However, despite the rapid advancements in the field of AI, the book’s core arguments regarding iterative development, close collaboration with users, and the co-evolution of technology and organization remain crucial. For a modern AI product engineer, understanding these principles is invaluable for navigating the challenges of designing, building, and deploying successful AI systems in real-world settings. The concept of an ‘ecology of computer science’ resonates with today’s discussions about building sustainable and ethically responsible AI systems. Skepticism about user development and the challenges of documentation also anticipate modern debates about the best ways to involve users and ensure transparency in AI development. Overall, this book serves as a valuable foundation for understanding the shift toward user-centric and evolutionary system development principles, highly applicable to building complex AI systems.
Flashcards
What are the three main types of prototypes?
Prototypes proper simulate specific aspects of a system, breadboards clarify technical feasibility, and pilot systems are deployed in real-world settings.
What are the three main goals of prototyping?
Exploratory prototyping clarifies requirements, experimental prototyping assesses technical feasibility, and evolutionary prototyping focuses on continuous adaptation.
What’s the difference between horizontal and vertical prototyping?
Horizontal prototyping focuses on specific layers, while vertical prototyping implements a selected part completely.
What’s the difference between verification and validation?
Formal verification checks internal consistency, while validation assesses usability in the real world.
Why is separating interaction and functionality important?
The separation of interaction and functionality allows the user interface and the functional core to evolve independently.
What is the MVC paradigm?
MVC (Model-View-Controller) provides a structured approach for building interactive systems, separating data management (model), presentation (view), and user input handling (controller).
Name some prototyping tools and their uses.
Screen generators support interface design, database tools aid data management, VHLLs enable flexibility, and programming environments integrate these tools.
What’s the central idea behind evolutionary system development?
Software development is seen as an ongoing, evolutionary process within dynamic organizational contexts.
What are some challenges of traditional software development methods?
Traditional waterfall-style methods prioritize upfront specification and linear development. They struggle with adaptability.
What challenges does prototyping introduce?
Documentation, developer and user training, changing management mindsets.
What are the three main types of prototypes?
Prototypes proper simulate specific aspects of a system, breadboards clarify technical feasibility, and pilot systems are deployed in real-world settings.
What are the three main goals of prototyping?
Exploratory prototyping clarifies requirements, experimental prototyping assesses technical feasibility, and evolutionary prototyping focuses on continuous adaptation.
What’s the difference between horizontal and vertical prototyping?
Horizontal prototyping focuses on specific layers, while vertical prototyping implements a selected part completely.
What’s the difference between verification and validation?
Formal verification checks internal consistency, while validation assesses usability in the real world.
Why is separating interaction and functionality important?
The separation of interaction and functionality allows the user interface and the functional core to evolve independently.
What is the MVC paradigm?
MVC (Model-View-Controller) provides a structured approach for building interactive systems, separating data management (model), presentation (view), and user input handling (controller).
Name some prototyping tools and their uses.
Screen generators support interface design, database tools aid data management, VHLLs enable flexibility, and programming environments integrate these tools.
What’s the central idea behind evolutionary system development?
Software development is seen as an ongoing, evolutionary process within dynamic organizational contexts.
What are some challenges of traditional software development methods?
Traditional waterfall-style methods prioritize upfront specification and linear development. They struggle with adaptability.
What challenges does prototyping introduce?
Documentation, developer and user training, changing management mindsets.